home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / pc / pm65sdk / sourcecode / includes / ciobjectaccess.h < prev    next >
C/C++ Source or Header  |  1996-11-18  |  12KB  |  329 lines

  1. /***[f*****************************************************************
  2.  *    CIObjAcc.h    -- PageMaker Object Access Interface. 
  3.  *
  4.  *    Copyright 1996 (c) Adobe Systems, Inc. All Rights Reserved
  5.  *
  6.  *    PageMaker internal version
  7.  *
  8.  * $Revision:   1.16  $
  9.  *
  10.  *
  11.  *    
  12.  ***f]*****************************************************************/
  13.   
  14. #ifndef __CIOBJACC_H
  15. #define __CIOBJACC_H
  16.  
  17. #include "pmtypes.h"
  18.  
  19. #define INVAL_OBJID ((unsigned long)0xFFFFFFFF)    /* Invalid ObjID */
  20.  
  21. typedef struct _PMOBJ_REC {
  22.     unsigned short    :16;
  23.     unsigned long    :32;
  24.     unsigned short    :16;
  25.     unsigned long    :32;
  26. } PMOBJ_REC, *PPMOBJ_REC;
  27.  
  28.  
  29. //    Attributes of a PageMaker object
  30. //    These attributes are common for
  31. //    all types of objects.
  32. //
  33. typedef struct _PMObjAttr {
  34.     unsigned short    type            :8;
  35.     unsigned short    visible            :1;
  36.     unsigned short    selected        :1;
  37.     unsigned short    locked            :1;
  38.     unsigned short    isInline        :1;
  39.     unsigned short    nonPrinting        :1;
  40.     unsigned short    isTransformed    :1;
  41.     unsigned short    isLinked        :1;
  42.     unsigned short    isBeingDeleted    :1;
  43.     unsigned short                    :8;
  44.     long            xLeftOrStart;
  45.     long            yTopOrStart;
  46.     long            xRightOrEnd;
  47.     long            yBottomOrEnd;
  48.     long            xRightOrStart;
  49.     long            yTopOrStart2;
  50.     long            xLeftOrEnd;
  51.     long            yBotOrEnd2;
  52.     char            layerName[32];
  53.     unsigned long    groupID;
  54.     unsigned long    maskID;
  55.     short            pageNum;
  56.     char            masterPageName[32];
  57. } PMObjAttr;
  58.  
  59. // Fill and line information about an object
  60. typedef struct _fillAndLineInfo {
  61.     int                cFillStyle;
  62.     char            sFillColor[32];
  63.     int                bFillOverprint;
  64.     int                cLineStyle;
  65.     int                bReverse;
  66.     short            dLineWeight;
  67.     int                bOpaque;
  68.     char            sLineColor[32];
  69.     int                bLineOverprint;
  70.     short            nFillTint;
  71.     short            nLineTint;
  72. } PMFillAndLineInfo;
  73.  
  74. // Fill and line information about an object
  75. typedef struct _transformInfo {
  76.     int                dRotateAngle;
  77.     int                dSkewAngle;
  78.     int                bXReflect;
  79.     long            width;
  80.     long            height;
  81.     long            xLeftTop;
  82.     long            yLeftTop;
  83.     long            xRightTop;
  84.     long            yRightTop;
  85.     long            xRightBottom;
  86.     long            yRightBottom;
  87.     long            xLeftBottom;
  88.     long            yLeftBottom;
  89. } PMTransformInfo;
  90.  
  91. // Link information about an object
  92. typedef struct _linkInfo {
  93.     char    fFilename[256];
  94.     int        cLinkTech;
  95.     char    sKind[64];
  96.     int        nSize;
  97.     char    sPlaceTime[256];        /* sys date/time when file last placed */
  98.     char    sPlaceModTime[256];        /* file's mod date/time when last placed */
  99.     char    sPMModTime[256];        /* sys date/time when data last modified in PM (useful for text) */
  100.     char    sCurModTime[256];        /* file's current mod date/time */
  101. } PMLinkInfo;
  102.  
  103. // Link information about an object that
  104. // includes a non-string represenation
  105. // of time.
  106. /*****************************************************************************
  107.  *    Date/time structure.
  108.  *
  109.  *    Times are stored in a packed 32-bit structure.
  110.  *    The meanings of the individual bit-fields have been 
  111.  *    chosen so as to make comparison of dates easy.
  112.  *    Times with a higher numerical value are more recent: times with a
  113.  *    lower numerical value are older. However, because different user
  114.  * machines may have different times set on their clocks, or because users
  115.  * may be collaborating with someone in a different time zone, it is
  116.  * safest to do a comparison of whether or not two given times are equal,
  117.  * rather than older or newer.
  118.  *
  119.  *    The high order WORD contains the date.  The low order WORD contains the
  120.  *    time.  Bit-field meanings are as follows (0 being the least-significant 
  121.  *    bit):
  122.  *         bit    meaning     range
  123.  *        -----   ---------   -----------------
  124.  *        25-31    year        0-127 [1980-2107]
  125.  *        21-24    month     1-12
  126.  *        16-20    day         1-31
  127.  *        11-15    hour        0-23
  128.  *         5-10    minutes     0-60
  129.  *         0- 4    seconds/2    0-29  [0-58]
  130.  *
  131.  */
  132. typedef struct _linkTimeInfo {
  133.     char    fFilename[256];
  134.     int        cLinkTech;
  135.     char    sKind[64];
  136.     int        nSize;
  137.     unsigned long    nPlaceTime;            /* sys date/time when file last placed */
  138.     unsigned long    nPlaceModTime;        /* file's mod date/time when last placed */
  139.     unsigned long    nPMModTime;            /* sys date/time when data last modified in PM (useful for text) */
  140.     unsigned long    nCurModTime;        /* file's current mod date/time */
  141. } PMLinkTimeInfo;
  142.  
  143. //    Information about an inline graphic
  144. //
  145. // One can get information about both "valid" and "invalid" inline graphics.
  146. // "Invalid" inlines are those that have not been drawn since they were
  147. // moved or possibly moved or will have been moved by composition.
  148. // Note that GetFirstObject/GetNextObject will only return "valid"
  149. // inlines. CIText::GetStoryFirstILG/CIText::GetStoryFirstILG will
  150. // return all inline, both valid and invalid, found in a story.
  151. typedef struct _PMILGInfo {
  152.     unsigned long    storyID;
  153.     unsigned long    charPosition;
  154.     int                bIsValid;
  155. } PMILGInfo;
  156.  
  157. // The structure that GetObjLinkTimeInfo returns.
  158. #ifdef MACINTOSH
  159. typedef struct 
  160. {
  161.     unsigned short year :7;     /* year 1980 - 2107 */
  162.     unsigned short month :4;     /* month 1 - 12 */
  163.     unsigned short day    :5;        /* day 1 - 31     */
  164.     unsigned short hour    :5;        /* hour 1 - 23 */
  165.     unsigned short minute :6;    /* minute 0 - 59 */
  166.     unsigned short second :5;    /* seconds/2   0-29 */
  167. } PMTime, *pPMTime;
  168. #endif
  169.  
  170. #ifdef WINDOWS
  171. typedef struct 
  172. {
  173.     unsigned short second :5;    /* seconds/2   0-29 */
  174.     unsigned short minute :6;    /* minute 0 - 59 */
  175.     unsigned short hour    :5;        /* hour 1 - 23 */
  176.     unsigned short day    :5;        /* day 1 - 31     */
  177.     unsigned short month :4;    /* month 1-12 */
  178.     unsigned short year :7;     /* year 1980 - 2107 */
  179.  
  180. } PMTime, *pPMTime;
  181. #endif
  182.  
  183. /**[g******************************************************************
  184.  * PMOBJACCFLAGTYPE
  185.  *
  186.  * DESCRIPTION:
  187.  *    The possible flags that can be used when beginning initializing
  188.  *    a loop through a subset of objects, starting with GetFirstObject().
  189.  *    These flags may be OR'ed to get, for example, all the selected
  190.  *    objects on the current spread (kGetSpreadObjects | kGetSelectedObjects).
  191.  *
  192.  **e]******************************************************************/
  193.  
  194. typedef DWORD PMOBJACCFLAGTYPE;
  195. #define kIncludePasteboard            (PMOBJACCFLAGTYPE) (1<<0)
  196. #define kIncludeMasterPages            (PMOBJACCFLAGTYPE) (1<<1)
  197. #define kIncludeInlines                (PMOBJACCFLAGTYPE) (1<<2)
  198. #define kIncludeGroupObjects        (PMOBJACCFLAGTYPE) (1<<3)
  199. #define kGetTopLevelObjectsOnly        (PMOBJACCFLAGTYPE) (1<<4)
  200. #define kGetSelectedObjectsOnly        (PMOBJACCFLAGTYPE) (1<<5)
  201. #define kGetTargetLayerObjectsOnly    (PMOBJACCFLAGTYPE) (1<<6)
  202.  
  203. #ifdef __cplusplus
  204.  
  205. class CIObjectAccess : public CIInterface
  206. {
  207. public:    
  208.     virtual            ~CIObjectAccess() {};
  209.     
  210.     // Is this a valid object?
  211.     // Use this to validate that a returned PMOBJ_REC really refers to
  212.     // a valid PM object before calling other CIObjectAccess routines.
  213.     virtual BOOL IsObject(PMOBJ_REC* pObjRec) = 0;
  214.     
  215.     // Methods for getting the objects on a given page
  216.     //
  217.     // Get the first object on the specified page.
  218.     // The method returns the object record for the first object on
  219.     // the given page that matches the specified PMOBJACCFLAGTYPE
  220.     // flags (kIncludeMasterPages, kGetTopObjectsOnly, etc.).
  221.     // If there are no objects of the given PMOBJACCFLAGTYPE,
  222.     // a CQ_OBJACC_OBJ_NOT_FOUND will be returned as a return code
  223.     // and the fields of the PMOBJ_REC will be zero'ed out.
  224.     //
  225.     // Regular page numbers may be specified. Alternatively, a master
  226.     // page may be specified by using -3 or -4 for left master page
  227.     // and right master page, respectively, in the pageNum parameter,
  228.     // and the name of the master page in the masterPageName parameter.
  229.     // In either case, if the pub has two page facing spreads, objects
  230.     // will be returned for each page. For example, if the pub has
  231.     // a two-page spread and pages 2 and 3 are facing pages, asking
  232.     // for the objects on page 2 will return all the objects on
  233.     // pages 2 and 3. And then, asking for the objects on page 3 will
  234.     // return all those same objects again.
  235.     // To get the objects on the current page, specify pageNum as -1
  236.     // (or leave the argument off, since that is the default).
  237.     //
  238.     // When specifying kIncludeInlines, GetFirstObject()/GetNextObject()
  239.     // will only return "valid" inlines--those that have not been moved
  240.     // or will not be affected by pending text composition.
  241.     //
  242.     // When specifying kGetSelectedObjectsOnly, here is how we determine which
  243.     //    objects to return:
  244.     //
  245.     //    kGetSelectedObjectsOnly | kGetTopLevelObjectsOnly (implies kIncludeGroupObjects):
  246.     //        selected objects:                Yes
  247.     //        selected group object:            Yes
  248.     //        objects in selected group:        No
  249.     //        sub selected objects in group:    No
  250.     //
  251.     //    kGetSelectedObjectsOnly | kIncludeGroupObjects:
  252.     //        selected objects:                Yes
  253.     //        selected group object:            Yes
  254.     //        objects in selected group:        No
  255.     //        sub selected objects in group:    Yes
  256.     //
  257.     //    kGetSelectedObjectsOnly:
  258.     //        selected objects:                Yes
  259.     //        selected group object:            No
  260.     //        objects in selected group:        Yes
  261.     //        sub selected objects in group:    Yes
  262.     //
  263.     //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  264.     //     WARNING: Calling GetFirstObject and GetNextObject will cause PageMaker
  265.     //        to turn the page (either to a master page or to the specified regular 
  266.     //        page) in order to look at the objects on the page.
  267.     //
  268.     //        It is very important that the caller DOES NOT turn the page until 
  269.     //        they have finished calling GetNextObject for a given page.
  270.     //        Once finished, the current page can be restored to its previous 
  271.     //        setting by calling RestorePage(), below.
  272.     //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  273.     //
  274.     virtual PMErr    GetFirstObject(PMOBJACCFLAGTYPE wantFlags, PMOBJ_REC* pObjRec, SHORT pageNum = -1, char *masterPageName = NULL) = 0;
  275.     // Get the next object on the page.
  276.     // The method returns the object record for the next object on
  277.     // page specified in the call to GetFirstObject(), using the
  278.     // PMOBJACCFLAGTYPE flags also specified in GetFirstObject().
  279.     // If there are no more objects of the given PMOBJACCFLAGTYPE,
  280.     // a CQ_OBJACC_OBJ_NOT_FOUND will be returned as a return code
  281.     // and the fields of the PMOBJ_REC will be zero'ed out.
  282.     //
  283.     virtual    PMErr    GetNextObject(PMOBJ_REC* pObjRec) = 0;
  284.     // Restore the page setting that the pub to what it was when
  285.     //    GetFirstObject was called.
  286.     //
  287.     virtual    PMErr     RestorePage() = 0;
  288.     
  289.     // Methods for getting and setting info for a given object.
  290.     // Note: The following methods may be called at any time and
  291.     // WILL NOT AFFECT the current state information used for
  292.     // the GetFirstObject/GetNextObject loop!
  293.     //
  294.  
  295.     // Given an object ID, return its object record
  296.     virtual    PMErr    GetPMObjRecFromObjID(unsigned long objID, PMOBJ_REC* pObjRec) = 0;
  297.     // Return the object ID for the given object
  298.     virtual    PMErr    GetObjID(PMOBJ_REC* pObjRec, unsigned long *objID) = 0;
  299.     // Return attribute information for given object
  300.     virtual PMErr    GetObjAttr(PMOBJ_REC* pObjRec, PMObjAttr* pAttr) = 0;
  301.     // Return fill and line information for given object
  302.     virtual    PMErr    GetObjFillAndLineInfo(PMOBJ_REC* pObjRec, PMFillAndLineInfo* pFillAndLineInfo) = 0;
  303.     // Return transformation information for given object
  304.     virtual    PMErr    GetObjTransformInfo(PMOBJ_REC* pObjRec, PMTransformInfo* pTransformInfo) = 0;
  305.     // Return link information for given object
  306.     virtual    PMErr    GetObjLinkInfo(PMOBJ_REC* pObjRec, PMLinkInfo* pLinkInfo) = 0;
  307.     // Return information about a given inline graphic object
  308.     virtual    PMErr    GetObjILGInfo(PMOBJ_REC* pILGObjRec, PMILGInfo* pILGInfo) = 0;
  309.     
  310.     // Return the preference memory used by the filter that imported this object.
  311.     // WARNING: PLUGINS MUST CALL FreeObjFilterPrefMem() WHEN FINISHED WITH IT.
  312.     virtual PMErr    GetObjFilterPrefMem(PMOBJ_REC* pObjRec, void **ppPrefMem, unsigned long *pdwPrefMemSize) = 0;
  313.     virtual PMErr    FreeObjFilterPrefMem() = 0;
  314.  
  315.     // Return an IAdobeVector OLE Interface for the given object
  316.     virtual    PMErr    OleQueryInterface(PMOBJ_REC* pObjRec, void *riid, void** ppInterface) = 0;
  317.  
  318.     // Return link information for given object
  319.     virtual    PMErr    GetObjLinkTimeInfo(PMOBJ_REC* pObjRec, PMLinkTimeInfo* pLinkTimeInfo) = 0;
  320.     
  321.     // Given an object record, return the objID of the frame containing
  322.     //  this object, if any (if not in frame, *pFrameID == INVAL_OBJID)
  323.     virtual    PMErr    GetFrameContainingObj(PMOBJ_REC* pObjRec, unsigned long *pFrameID) = 0;
  324. } ;
  325.  
  326. #endif    // __cplusplus
  327.  
  328. #endif
  329.